#ifdef GL_ES
precision mediump float;
#endif

uniform vec2 u_resolution;

/**
 * 主函数，计算并输出片段颜色
 * 该函数根据屏幕坐标和太阳位置计算天空颜色效果
 * 参数：无
 * 返回值：无（通过gl_FragColor输出颜色）
 */
void main() {
    // 计算归一化屏幕坐标，将屏幕坐标映射到[0,1]范围
    vec2 uv = gl_FragCoord.xy / u_resolution;

    // 太阳位置设置在屏幕中心
    vec2 sunVec = vec2(0.5, 0.5);

    // 计算米氏散射遮罩，用于模拟太阳周围的光晕效果
    float sun = max(1.0 - (1.0 + 10.0 * sunVec.y + 1.0 * uv.y) * length(uv - sunVec), 0.0) + 0.3 * pow(1.0 - uv.y, 12.0) * (1.6 - sunVec.y);

    // 根据太阳位置和米氏散射计算最终颜色，并输出到片段颜色
    gl_FragColor = vec4(mix(vec3(0.3984, 0.5117, 0.7305), vec3(0.7031, 0.4687, 0.1055), sun) * ((0.5 + 1.0 * pow(sunVec.y, 0.4)) * (1.5 - uv.y) + pow(sun, 5.2) * sunVec.y * (5.0 + 15.0 * sunVec.y)), 1.0);

}